<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script>
		var version = 1;
		var databaseName = "database";
		var db;
		var request ;
		request = window.indexedDB.open(databaseName, version);

		/**
		 * 新建数据库与打开数据库是同一个操作。
		 * 如果要打开的数据库不存在，则会先新建数据库：
		 * 		1. 新建数据库时调用 request.onupgradeneeded（因为这时版本从无到有，所以会触发这个事件）
		 * 		2. 把数据库版本设为 1
		 * 		3.此时数据库对象 db = e.target.result;
		 * 新建数据库后，就可以打开数据库了，所以继续调用 request.onsuccess
		 * */
		request.onupgradeneeded = function(e) {
			db = e.target.result;
			console.log("onupgrageneeded");
			// 通常新建数据库以后，第一件事是新建对象仓库（即新建表），并设置主键
			var objectStore;
			if(!db.objectStoreNames.contains(databaseName)) {//如果这个 对象仓库/表 不存在，就新建
				objectStore = db.createObjectStore("person", {
					keyPath: "id" //设置主键为 id
				});
			}
		}
		
		/**
		 * 如果要打开的数据库存在，则会直接打开该数据库
		 * 此时数据库对象 db = request.result;
		 * */
		request.onsuccess = function(e) {
			db = request.result;
			console.log("success");
		}
		
		/**
		 * 数据库打开错误时调用此回调函数
		 * */
		request.onerror = function(e) {
			console.log("error");
		}
		
		var obj1 = {id:1,name:"张三",age:24,email:"zhangsan@foxmail.com"};
		var obj2 = {id:2,name:"李四",age:30,email:"lisi@foxmail.com"};
		function addRecord(obj){
			var request = db.transaction(["person"],"readwrite") //写入数据需要新建一个事务。新建时必须指定表格名称和操作模式（“只读”或“读写”）
			.objectStore("person") //新建事务以后，通过IDBTransaction.objectStore(name)方法，拿到 IDBObjectStore 对象
			.add(obj); //再通过表格对象的add()方法，向表格写入一条记录
			request.onsuccess = function(e){
				console.log("数据写入成功");
			}
			request.onerror = function(e){
				console.log("数据写入失败");
			}
		}
		window.onload = function(){
			addRecord(obj1);
			addRecord(obj2);
		}
	</script>
</html>
